package com.woniu108.order.service;

import com.alipay.api.AlipayApiException;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.woniu108.order.model.dto.OrderServiceDto;
import com.woniu108.order.model.model.OrderService;
import com.woniu108.order.model.param.OrderServiceAddParam;
import com.woniu108.order.model.param.OrderServiceQueryConditionParam;
import com.woniu108.order.model.param.OrderServiceQueryConditionToStoreAdminParam;

import java.util.Map;

/**
 * <p>
 * 服务订单 服务类
 * </p>
 *
 * @author yanxi
 * @since 2024-05-23
 */
public interface OrderServiceService extends IService<OrderService> {

    /**
     * 按条件查询服务订单（管理员）
     * @param param 查询订单参数
     * @return 分页后的服务订单集合
     */
    Page<OrderServiceDto> selectOrderServicesByCondition(OrderServiceQueryConditionParam param);

    /**
     * 按条件查询服务订单（门店）
     * @param param 查询订单参数
     * @return 分页后的服务订单集合
     */
    Page<OrderServiceDto> selectOrderServicesByConditionToStore(OrderServiceQueryConditionToStoreAdminParam param);

    /**
     * 按条件查询服务订单（用户）
     * @param param 查询订单参数
     * @return 分页后的服务订单集合
     */
    Page<OrderServiceDto> selectOrderServicesByConditionToUser(OrderServiceQueryConditionParam param);

    /**
     * 按订单编号精确查询服务订单
     * @param orderServiceNum 服务订单编号
     * @return 订单服务信息dto
     */
    OrderServiceDto selectOrderServiceByOrderServiceNum(String orderServiceNum);

    /**
     * 根据服务订单编号修改评分状态
     * @param orderServiceNum 服务订单编号
     * @return boolean值
     */
    Boolean updateOrderServiceReviewStateByOrderServiceNum(String orderServiceNum);

    /**
     * 用户主动取消订单
     * @param orderServiceNum 服务订单编号
     * @param userId 登录用户id
     * @return
     */
    Boolean cancelOrder(String orderServiceNum, String userId);

    /**
     * 删除订单
     * @param orderServiceNum 服务订单编号
     * @param userId 用户id
     * @return Boolean值
     */
    Boolean deleteOrder(String orderServiceNum, String userId);

    /**
     * 门店下单（门店管理员）
     * @param param
     * @param token
     * @return
     */
    Boolean orderService(OrderServiceAddParam param,String token);

    /**
     * 普通支付
     * @param orderServiceNum 服务订单编号
     * @param userId 用户id
     * @param token token转发
     * @return 判定值
     */
    String payByCommon(String orderServiceNum, String userId,String token) throws Exception;

    /**
     * 支付回调
     * @param params
     */
    void payNotify(Map<String, String> params) throws AlipayApiException;

    /**
     * vip支付服务订单
     * @param orderServiceNum 订单服务编号
     * @param userId 用户id
     * @return 支付表单
     */
    String payByVip(String orderServiceNum, String userId) throws Exception;

    /**
     * 修改服务订单状态,验证流程是否走完
     * @param orderNum 订单编号
     * @return 布尔值
     */
    Boolean updateOrderServiceStateByOrderNum(String orderNum);

    String finishOrderState(String orderNum);
}
